home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Source / GNU / cc / fixinc.mips < prev    next >
Text File  |  1993-09-08  |  35KB  |  1,124 lines

  1. #! /bin/sh
  2. # Install modified versions of certain ANSI-incompatible system header files
  3. # which are fixed to work correctly with ANSI C
  4. # and placed in a directory that GNU C will search.
  5.  
  6. # See README-fixinc for more information.
  7.  
  8. # Directory where gcc sources (and sometimes special include files) live.
  9. # fixincludes doesn't use this, but fixinc.svr4 does, and I want to make
  10. # sure somebody doesn't try to use arg3 for something incompatible. -- gumby
  11. SRCDIR=${3-${SRCDIR-.}}
  12.  
  13. # Directory containing the original header files.
  14. # (This was named INCLUDES, but that conflicts with a name in Makefile.in.)
  15. INPUT=${2-${INPUT-/usr/include}}
  16.  
  17. # Directory in which to store the results.
  18. LIB=${1?"fixincludes: output directory not specified"}
  19.  
  20. # Define PWDCMD as a command to use to get the working dir
  21. # in the form that we want.
  22. PWDCMD=pwd
  23. case "`pwd`" in
  24. //*)
  25.     # On an Apollo, discard everything before `/usr'.
  26.     PWDCMD="eval pwd | sed -e 's,.*/usr/,/usr/,'"
  27.     ;;
  28. esac
  29.  
  30. # Original directory.
  31. ORIGDIR=`${PWDCMD}`
  32.  
  33. # Make sure it exists.
  34. if [ ! -d $LIB ]; then
  35.   mkdir $LIB || exit 1
  36. fi
  37.  
  38. # Make LIB absolute only if needed to avoid problems with the amd.
  39. case $LIB in
  40. /*)
  41.     ;;
  42. *)
  43.     cd $LIB; LIB=`${PWDCMD}`
  44.     ;;
  45. esac
  46.  
  47. # Make SRCDIR absolute only if needed to avoid problems with the amd.
  48. cd $ORIGDIR
  49. case $SRCDIR in
  50. /*)
  51.     ;;
  52. *)
  53.     cd $SRCDIR; SRCDIR=`${PWDCMD}`
  54.     ;;
  55. esac
  56.  
  57. # Fail if no arg to specify a directory for the output.
  58. if [ x$1 = x ]
  59. then echo fixincludes: no output directory specified
  60. exit 1
  61. fi
  62.  
  63. echo Building fixed headers in ${LIB}
  64.  
  65. # Determine whether this system has symbolic links.
  66. if ln -s X $LIB/ShouldNotExist 2>/dev/null; then
  67.   rm -f $LIB/ShouldNotExist
  68.   LINKS=true
  69. else
  70.   LINKS=false
  71. fi
  72.  
  73. echo Finding directories and links to directories
  74. cd ${INPUT}
  75. # Find all directories and all symlinks that point to directories.
  76. # Put the list in $files.
  77. # Each time we find a symlink, add it to newdirs
  78. # so that we do another find within the dir the link points to.
  79. # Note that $files may have duplicates in it;
  80. # later parts of this file are supposed to ignore them.
  81. dirs="."
  82. levels=2
  83. while [ -n "$dirs" ] && [ $levels -gt 0 ]
  84. do
  85.     levels=`expr $levels - 1`
  86.     newdirs=
  87.     for d in $dirs
  88.     do
  89.     echo " Searching $INPUT/$d"
  90.     if [ "$d" != . ]
  91.     then
  92.         d=$d/.
  93.     fi
  94.  
  95.     # Find all directories under $d, relative to $d, excluding $d itself.
  96.         files="$files `find $d -type d -print | \
  97.                sed -e '/\/\.$/d' -e '/^\.$/d'`"
  98.     # Find all links to directories.
  99.     # Using `-exec test -d' in find fails on some systems,
  100.     # and trying to run test via sh fails on others,
  101.     # so this is the simplest alternative left.
  102.     # First find all the links, then test each one.
  103.     theselinks=
  104.     $LINKS && \
  105.       theselinks=`find $d -type l -print`
  106.     for d1 in $theselinks --dummy--
  107.     do
  108.         # If the link points to a directory,
  109.         # add that dir to $newdirs
  110.         if [ -d $d1 ]
  111.         then
  112.         newdirs="$newdirs $d1"
  113.         fi
  114.     done
  115.     done
  116.  
  117.     files="$files $newdirs"
  118.     dirs="$newdirs"
  119. done
  120.  
  121. dirs=
  122. echo "All directories (including links to directories):"
  123. echo $files
  124.  
  125. for file in $files; do
  126.   rm -rf $LIB/$file
  127.   if [ ! -d $LIB/$file ]
  128.   then mkdir $LIB/$file
  129.   fi
  130. done
  131. mkdir $LIB/root
  132.  
  133. # treetops gets an alternating list
  134. # of old directories to copy
  135. # and the new directories to copy to.
  136. treetops="${INPUT} ${LIB}"
  137.  
  138. if $LINKS; then
  139.   echo 'Making symbolic directory links'
  140.   for file in $files; do
  141.     dest=`ls -ld $file | sed -n 's/.*-> //p'`
  142.     if [ "$dest" ]; then    
  143.       cwd=`${PWDCMD}`
  144.       # In case $dest is relative, get to $file's dir first.
  145.       cd ${INPUT}
  146.       cd `echo ./$file | sed -n 's&[^/]*$&&p'`
  147.       # Check that the target directory exists.
  148.       # Redirections changed to avoid bug in sh on Ultrix.
  149.       (cd $dest) > /dev/null 2>&1
  150.       if [ $? = 0 ]; then
  151.     cd $dest
  152.     # X gets the dir that the link actually leads to.
  153.     x=`${PWDCMD}`
  154.     # If a link points to ., make a similar link to .
  155.     if [ $x = $INPUT ]; then
  156.       echo $file '->' . ': Making link'
  157.       rm -fr ${LIB}/$file > /dev/null 2>&1
  158.       ln -s . ${LIB}/$file > /dev/null 2>&1
  159.     # If link leads back into ${INPUT},
  160.     # make a similar link here.
  161.     elif expr $x : "${INPUT}/.*" > /dev/null; then
  162.       # Y gets the actual target dir name, relative to ${INPUT}.
  163.       y=`echo $x | sed -n "s&${INPUT}/&&p"`
  164.       echo $file '->' $y ': Making link'
  165.       rm -fr ${LIB}/$file > /dev/null 2>&1
  166.       ln -s ${LIB}/$y ${LIB}/$file > /dev/null 2>&1
  167.     else
  168.       # If the link is to a dir $target outside ${INPUT},
  169.       # repoint the link at ${INPUT}/root$target
  170.       # and process $target into ${INPUT}/root$target
  171.       # treat this directory as if it actually contained the files.
  172.       echo $file '->' root$x ': Making link'
  173.       if [ -d $LIB/root$x ]
  174.       then true
  175.       else
  176.         dirname=root$x/
  177.         dirmade=.
  178.         cd $LIB
  179.         while [ x$dirname != x ]; do
  180.           component=`echo $dirname | sed -e 's|/.*$||'`
  181.           mkdir $component >/dev/null 2>&1
  182.           cd $component
  183.           dirmade=$dirmade/$component
  184.           dirname=`echo $dirname | sed -e 's|[^/]*/||'`
  185.         done
  186.       fi
  187.       # Duplicate directory structure created in ${LIB}/$file in new
  188.       # root area.
  189.       for file2 in $files; do
  190.         case $file2 in
  191.           $file/./*)
  192.         dupdir=${LIB}/root$x/`echo $file2 | sed -n "s|^${file}/||p"`
  193.         echo "Duplicating ${file}'s ${dupdir}"
  194.         if [ -d ${dupdir} ]
  195.         then true
  196.         else
  197.           mkdir ${dupdir}
  198.         fi
  199.         ;;
  200.           *)
  201.         ;;
  202.         esac
  203.           done
  204.       rm -fr ${LIB}/$file > /dev/null 2>&1
  205.       ln -s ${LIB}/root$x ${LIB}/$file > /dev/null 2>&1
  206.       treetops="$treetops $x ${LIB}/root$x"
  207.     fi
  208.       fi
  209.       cd $cwd
  210.     fi
  211.   done
  212. fi
  213.  
  214. set x $treetops
  215. shift
  216. while [ $# != 0 ]; do
  217.   # $1 is an old directory to copy, and $2 is the new directory to copy to.
  218.   cd ${INPUT}
  219.   cd $1
  220. # The same dir can appear more than once in treetops.
  221. # There's no need to scan it more than once.
  222.   if [ -f $2/DONE ]
  223.   then
  224.     files=
  225.   else
  226.     touch $2/DONE
  227.     echo Fixing directory $1 into $2
  228. # Check .h files which are symlinks as well as those which are files.
  229. # A link to a header file will not be processed by anything but this.
  230.     if $LINKS; then
  231.       files=`find . -name '*.h' \( -type f -o -type l \) -print`
  232.     else
  233.       files=`find . -name '*.h' -type f -print`
  234.     fi
  235.     echo Checking header files
  236.   fi
  237. # Note that BSD43_*,SYSTYPE_*,MIPSE[LB] are used on recent MIPS systems.
  238.   for file in $files; do
  239. # This call to egrep is essential, since checking a file with egrep
  240. # is much faster than actually trying to fix it.
  241. # It is also essential that most files *not* match!
  242. # Thus, matching every #endif is unacceptable.
  243. # But the argument to egrep must be kept small, or many versions of egrep
  244. # won't be able to handle it.
  245. #
  246. # We use the pattern [!-.0-~] instead of [^/     ] to match a noncomment
  247. # following #else or #endif because some buggy egreps think [^/] matches
  248. # newline, and they thus think `#else ' matches `#e[ndiflse]*[     ]+[^/     ]'.
  249. #
  250. # We use the pattern [^a-zA-Z0-9_][_a-ce-km-z][a-z0-9] to match an identifier
  251. # following #if or #elif that is not surrounded by __.  The `a-ce-km-z'
  252. # in this pattern lacks `d' and `l'; this means we don't worry about
  253. # identifiers starting with `d' or `l'.  This is OK, since none of the
  254. # identifiers below start with `d' or `l'.  It also greatly improves
  255. # performance, since many files contain lines of the form `#if ... defined ...'
  256. # or `#if lint'.
  257.     if egrep '//|[     _]_IO|CTRL|SYSTYPE|MIPSE|^#define.NULL|^#e[nl][ds][ief]*[     ]+[!-.0-~]|^#[el]*if.*[^a-zA-Z0-9_][_a-ce-km-z][a-z0-9]' $file >/dev/null; then
  258.       if [ -r $file ]; then
  259.     cp $file $2/$file >/dev/null 2>&1    \
  260.     || echo "Can't copy $file"
  261.     chmod +w $2/$file
  262.     chmod a+r $2/$file
  263.     # Here is how the sed commands in braces work.
  264.     # (It doesn't work to put the comments inside the sed commands.)
  265.         # Surround each word with spaces, to simplify matching below.
  266.         # ANSIfy each pre-ANSI machine-dependent symbol
  267.         # by surrounding it with __ __.
  268.         # Remove the spaces that we inserted around each word.
  269.     sed -e '
  270.                    :loop
  271.       /\\$/            N
  272.       /\\$/            b loop
  273.       s%^\([     ]*#[     ]*endif[     ]*\)\([^/     ].*\)$%\1/* \2 */%
  274.       s%^\([     ]*#[     ]*else[     ]*\)\([^/     ].*\)$%\1/* \2 */%
  275.       /\/\/[^*]/            s|//\(.*\)$|/*\1*/|
  276.       /[     ]_IO[A-Z]*[     ]*(/    s/\(_IO[A-Z]*[     ]*(\)\(.\),/\1'\''\2'\'',/
  277.       /[     ]BSD43__IO[A-Z]*[     ]*(/    s/(\(.\),/('\''\1'\'',/
  278.       /#define._IO/            s/'\''\([cgx]\)'\''/\1/g
  279.       /#define.BSD43__IO/        s/'\''\([cgx]\)'\''/\1/g
  280.       /[^A-Z0-9_]CTRL[     ]*(/        s/\([^'\'']\))/'\''\1'\'')/
  281.       /[^A-Z0-9]_CTRL[     ]*(/        s/\([^'\'']\))/'\''\1'\'')/
  282.       /#define.CTRL/        s/'\''\([cgx]\)'\''/\1/g
  283.       /#define._CTRL/        s/'\''\([cgx]\)'\''/\1/g
  284.       /#define.BSD43_CTRL/        s/'\''\([cgx]\)'\''/\1/g
  285.       /#[el]*if/{
  286.         s/[a-zA-Z0-9_][a-zA-Z0-9_]*/ & /g
  287.  
  288.         s/ bsd4\([0-9]\) / __bsd4\1__ /g
  289.         s/ _*i386 / __i386__ /g
  290.         s/ is68k / __is68k__ /g
  291.         s/ m68k / __m68k__ /g
  292.         s/ mc680\([0-9]\)0 / __mc680\10__ /g
  293.         s/ news\([0-9]*\) / __news\1__ /g
  294.         s/ ns32000 / __ns32000__ /g
  295.         s/ pyr / __pyr__ /g
  296.         s/ sony_news / __sony_news__ /g
  297.         s/ sparc / __sparc__ /g
  298.         s/ sun\([a-z0-9]*\) / __sun\1__ /g
  299.         s/ unix / __unix__ /g
  300.         s/ vax / __vax__ /g
  301.         s/ _*\(MIPSE[LB]\) / __\1__ /g
  302.         s/ _*\(mips\) / __\1__ /g
  303.         s/ _*\(host_mips\) / __\1__ /g
  304.         s/ _*\(SYSTYPE_[A-Z0-9]*\) / __\1__ /g
  305.  
  306.         s/ \([a-zA-Z0-9_][a-zA-Z0-9_]*\) /\1/g
  307.       }
  308.       /^#define.NULL[     ]/    i\
  309.         #undef NULL
  310.     ' $2/$file > $2/$file.
  311.     mv $2/$file. $2/$file
  312.     if cmp $file $2/$file >/dev/null 2>&1; then
  313.        rm $2/$file
  314.     else
  315.        echo Fixed $file
  316.     fi
  317.       fi
  318.     fi
  319.   done
  320.   shift; shift
  321. done
  322.  
  323. cd ${INPUT}
  324.  
  325. # Install the proper definition of size_t in header files that it comes from.
  326. for file in sys/types.h sys/stdtypes.h stddef.h memory.h stdlib.h unistd.h;
  327. do
  328.   if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  329.     cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  330.     chmod +w ${LIB}/$file 2>/dev/null
  331.     chmod a+r ${LIB}/$file 2>/dev/null
  332.   fi
  333.  
  334.   if [ -r ${LIB}/$file ]; then
  335.     echo Fixing $file size_t typedef
  336.     # Extract the definition of SIZE_TYPE, if any.
  337.     # (This file must be called something.c).
  338.     echo "#include \"tm.h\"
  339. gobblegobble SIZE_TYPE" > ${LIB}/types.c
  340.     foo=`cd ${LIB}; cc -E -I${ORIGDIR} -I${SRCDIR} -I${SRCDIR}/config types.c | grep gobblegobble | sed -e "s/gobblegobble[     ]*//"`
  341.     rm -f ${LIB}/types.c
  342.     # Default to our preferred type.
  343.     if [ "$foo" = SIZE_TYPE ]; then foo="unsigned long int"; else foo=`echo $foo | sed -e 's/^.*"\(.*\)".*$/\1/'`; fi
  344.     sed -e "s/typedef[     a-z_]*[     ]size_t/typedef $foo size_t/" \
  345.       -e "s/typedef[     a-z_]*[     ]bsd43_(size_t)/typedef $foo bsd43_(size_t)/" \
  346.       ${LIB}/$file > ${LIB}/${file}.sed
  347.     rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  348.     if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  349.       rm ${LIB}/$file
  350.     fi
  351.   fi
  352. done
  353.  
  354. # Fix one other error in this file: a mismatched quote not inside a C comment.
  355. file=sundev/vuid_event.h
  356. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  357.   mkdir ${LIB}/sundev 2>/dev/null
  358.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  359.   chmod +w ${LIB}/$file 2>/dev/null
  360.   chmod a+r ${LIB}/$file 2>/dev/null
  361. fi
  362.  
  363. if [ -r ${LIB}/$file ]; then
  364.   echo Fixing $file comment
  365.   sed -e "s/doesn't/does not/" ${LIB}/$file > ${LIB}/${file}.sed
  366.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  367.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  368.     rm ${LIB}/$file
  369.   fi
  370. fi
  371.  
  372. # Fix these Sun OS files to avoid an invalid identifier in an #ifdef.
  373. file=sunwindow/win_cursor.h
  374. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  375. #  mkdir ${LIB}/sunwindow 2>/dev/null
  376.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  377.   chmod +w ${LIB}/$file 2>/dev/null
  378. fi
  379. if [ -r ${LIB}/$file ]; then
  380.   echo Fixing $file
  381.   sed -e "s/ecd.cursor/ecd_cursor/" ${LIB}/$file > ${LIB}/${file}.sed
  382.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  383.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  384.     rm ${LIB}/$file
  385.   fi
  386. fi
  387. file=sunwindow/win_lock.h
  388. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  389. #  mkdir ${LIB}/sunwindow 2>/dev/null
  390.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  391.   chmod +w ${LIB}/$file 2>/dev/null
  392. fi
  393. if [ -r ${LIB}/$file ]; then
  394.   echo Fixing $file
  395.   sed -e "s/ecd.cursor/ecd_cursor/" ${LIB}/$file > ${LIB}/${file}.sed
  396.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  397.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  398.     rm ${LIB}/$file
  399.   fi
  400. fi
  401.  
  402. # Fix this Sun file to avoid interfering with stddef.h.
  403. file=sys/stdtypes.h
  404. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  405.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  406.   chmod +w ${LIB}/$file 2>/dev/null
  407.   chmod a+r ${LIB}/$file 2>/dev/null
  408. fi
  409.  
  410. if [ -r ${LIB}/$file ]; then
  411.   echo Fixing $file
  412. sed -e '/size_t.*;/i\
  413. #ifndef _GCC_SIZE_T\
  414. #define _GCC_SIZE_T' \
  415.     -e '/size_t.*;/a\
  416. #endif' \
  417.     -e '/ptrdiff_t.*;/i\
  418. #ifndef _GCC_PTRDIFF_T\
  419. #define _GCC_PTRDIFF_T' \
  420.     -e '/ptrdiff_t.*;/a\
  421. #endif' \
  422.     -e '/wchar_t.*;/i\
  423. #ifndef _GCC_WCHAR_T\
  424. #define _GCC_WCHAR_T' \
  425.     -e '/wchar_t.*;/a\
  426. #endif' ${LIB}/$file > ${LIB}/${file}.sed
  427.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  428.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  429.     rm ${LIB}/$file
  430.   fi
  431. fi
  432.  
  433. # Fix this file to avoid interfering with stddef.h, but don't mistakenly
  434. # match e.g. ssize_t present in AIX for the ps/2.
  435. file=sys/types.h
  436. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  437.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  438.   chmod +w ${LIB}/$file 2>/dev/null
  439.   chmod a+r ${LIB}/$file 2>/dev/null
  440. fi
  441.  
  442. if [ -r ${LIB}/$file ]; then
  443.   echo Fixing $file
  444. sed -e '/[     ]size_t.*;/i\
  445. #ifndef _GCC_SIZE_T\
  446. #define _GCC_SIZE_T' \
  447.     -e '/[     ]size_t.*;/a\
  448. #endif' ${LIB}/$file > ${LIB}/${file}.sed
  449.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  450.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  451.     rm ${LIB}/$file
  452.   fi
  453. fi
  454.  
  455. # Fix an error in this file: the #if says _cplusplus, not the double
  456. # underscore __cplusplus that it should be
  457. file=tinfo.h
  458. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  459.   mkdir ${LIB}/rpcsvc 2>/dev/null
  460.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  461.   chmod +w ${LIB}/$file 2>/dev/null
  462.   chmod a+r ${LIB}/$file 2>/dev/null
  463. fi
  464.  
  465. if [ -r ${LIB}/$file ]; then
  466.   echo Fixing $file, __cplusplus macro
  467.   sed -e 's/[     ]_cplusplus/ __cplusplus/' ${LIB}/$file > ${LIB}/${file}.sed
  468.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  469.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  470.     rm ${LIB}/$file
  471.   fi
  472. fi
  473.  
  474. # Fix an error in this file: a missing semi-colon at the end of the statsswtch
  475. # structure definition.
  476. file=rpcsvc/rstat.h
  477. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  478.   mkdir ${LIB}/rpcsvc 2>/dev/null
  479.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  480.   chmod +w ${LIB}/$file 2>/dev/null
  481.   chmod a+r ${LIB}/$file 2>/dev/null
  482. fi
  483.  
  484. if [ -r ${LIB}/$file ]; then
  485.   echo Fixing $file, definition of statsswtch
  486.   sed -e 's/boottime$/boottime;/' ${LIB}/$file > ${LIB}/${file}.sed
  487.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  488.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  489.     rm ${LIB}/$file
  490.   fi
  491. fi
  492.  
  493. # Fix an error in this file: a missing semi-colon at the end of the nodeent
  494. # structure definition.
  495. file=netdnet/dnetdb.h
  496. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  497.   mkdir ${LIB}/netdnet 2>/dev/null
  498.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  499.   chmod +w ${LIB}/$file 2>/dev/null
  500.   chmod a+r ${LIB}/$file 2>/dev/null
  501. fi
  502.  
  503. if [ -r ${LIB}/$file ]; then
  504.   echo Fixing $file, definition of nodeent
  505.   sed -e 's/char.*na_addr *$/char *na_addr;/' ${LIB}/$file > ${LIB}/${file}.sed
  506.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  507.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  508.     rm ${LIB}/$file
  509.   fi
  510. fi
  511.  
  512. # Check for bad #ifdef line (in Ultrix 4.1)
  513. file=sys/file.h
  514. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  515.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  516.   chmod +w ${LIB}/$file 2>/dev/null
  517.   chmod a+r ${LIB}/$file 2>/dev/null
  518. fi
  519.  
  520. if [ -r ${LIB}/$file ]; then
  521.   echo Fixing $file, bad \#ifdef line
  522.   sed -e 's/#ifdef KERNEL/#if defined(KERNEL)/' ${LIB}/$file > ${LIB}/${file}.sed
  523.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  524.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  525.     rm ${LIB}/$file
  526.   fi
  527. fi
  528.  
  529. # Remove nested comments created by #endifs in a comment (Ultrix 4.1)
  530. # Only needed if commenting out junk after #endif.
  531. file=signal.h
  532. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  533.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  534.   chmod +w ${LIB}/$file 2>/dev/null
  535.   chmod a+r ${LIB}/$file 2>/dev/null
  536. fi
  537.  
  538. if [ -r ${LIB}/$file ]; then
  539.   echo Fixing $file, nested comments
  540.   sed -e 's/^[     ]#endif.*/#endif/' ${LIB}/$file > ${LIB}/${file}.sed
  541.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  542.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  543.     rm -f ${LIB}/$file
  544.   fi
  545. fi
  546.  
  547. # Check for superfluous `static' (in Ultrix 4.2)
  548. file=machine/cpu.h
  549. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  550.   mkdir ${LIB}/machine 2>/dev/null
  551.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  552.   chmod +w ${LIB}/$file 2>/dev/null
  553.   chmod a+r ${LIB}/$file 2>/dev/null
  554. fi
  555.  
  556. if [ -r ${LIB}/$file ]; then
  557.   echo Fixing $file, superfluous static
  558.   sed -e 's/^static struct tlb_pid_state/struct tlb_pid_state/' ${LIB}/$file > ${LIB}/${file}.sed
  559.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  560.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  561.     rm ${LIB}/$file
  562.   else
  563. # This file has an alternative name, mips/cpu.h.  Fix that name, too.
  564.     if cmp machine/cpu.h mips/cpu.h > /dev/null 2>& 1; then
  565.       mkdir ${LIB}/mips 2>&-
  566.       ln ${LIB}/$file ${LIB}/mips/cpu.h 
  567.     fi
  568.   fi
  569. fi
  570.  
  571. # Incorrect sprintf declaration in X11/Xmu.h
  572. file=X11/Xmu.h
  573. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  574.   mkdir ${LIB}/X11 2>/dev/null
  575.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  576.   chmod +w ${LIB}/$file 2>/dev/null
  577.   chmod a+r ${LIB}/$file 2>/dev/null
  578. fi
  579.  
  580. if [ -r ${LIB}/$file ]; then
  581.   echo Fixing $file sprintf declaration
  582.   sed -e 's,^extern char \*    sprintf();$,#ifndef __STDC__\
  583. extern char *    sprintf();\
  584. #endif /* !defined __STDC__ */,' ${LIB}/$file > ${LIB}/${file}.sed
  585.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  586.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  587.     rm ${LIB}/$file
  588.   fi
  589. fi
  590.  
  591. # Incorrect sprintf declaration in X11/Xmu/Xmu.h
  592. # (It's not clear whether the right file name is this or X11/Xmu.h.)
  593. file=X11/Xmu/Xmu.h
  594. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  595.   mkdir ${LIB}/X11/Xmu 2>/dev/null
  596.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  597.   chmod +w ${LIB}/$file 2>/dev/null
  598.   chmod a+r ${LIB}/$file 2>/dev/null
  599. fi
  600.  
  601. if [ -r ${LIB}/$file ]; then
  602.   echo Fixing $file sprintf declaration
  603.   sed -e 's,^extern char \*    sprintf();$,#ifndef __STDC__\
  604. extern char *    sprintf();\
  605. #endif /* !defined __STDC__ */,' ${LIB}/$file > ${LIB}/${file}.sed
  606.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  607.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  608.     rm ${LIB}/$file
  609.   fi
  610. fi
  611.  
  612. # Check for missing ';' in struct
  613. file=netinet/ip.h
  614. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  615.   mkdir ${LIB}/netinet 2>/dev/null
  616.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  617.   chmod +w ${LIB}/$file 2>/dev/null
  618.   chmod a+r ${LIB}/$file 2>/dev/null
  619. fi
  620.  
  621. if [ -r ${LIB}/$file ]; then
  622.   echo Fixing $file
  623.   sed -e '/^struct/,/^};/s/}$/};/' ${LIB}/$file > ${LIB}/${file}.sed
  624.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  625.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  626.     rm -f ${LIB}/$file
  627.   fi
  628. fi
  629.  
  630. # Fix the CAT macro in SunOS memvar.h.
  631. file=pixrect/memvar.h
  632. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  633.   mkdir ${LIB}/pixrect 2>/dev/null
  634.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  635.   chmod +w ${LIB}/$file 2>/dev/null
  636.   chmod a+r ${LIB}/$file 2>/dev/null
  637. fi
  638.  
  639. if [ -r ${LIB}/$file ]; then
  640.   echo Fixing $file
  641.   sed -e '/^#define.CAT(a,b)/ i\
  642. #ifdef __STDC__ \
  643. #define CAT(a,b) a##b\
  644. #else
  645. /^#define.CAT(a,b)/ a\
  646. #endif
  647. ' ${LIB}/$file > ${LIB}/${file}.sed
  648.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  649.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  650.     rm -f ${LIB}/$file
  651.   fi
  652. fi
  653.  
  654. # Check for yet more missing ';' in struct (in SunOS 4.0.x)
  655. file=rpcsvc/rusers.h
  656. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  657.   mkdir ${LIB}/rpcsvc 2>/dev/null
  658.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  659.   chmod +w ${LIB}/$file 2>/dev/null
  660.   chmod a+r ${LIB}/$file 2>/dev/null
  661. fi
  662.  
  663. if [ -r ${LIB}/$file ]; then
  664.   echo Fixing $file
  665.   sed -e '/^struct/,/^};/s/_cnt$/_cnt;/' ${LIB}/$file > ${LIB}/${file}.sed
  666.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  667.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  668.     rm -f ${LIB}/$file
  669.   fi
  670. fi
  671.  
  672. # Fix return type of exit and abort in <stdlib.h> on SunOS 4.1.
  673. file=stdlib.h
  674. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  675.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  676.   chmod +w ${LIB}/$file 2>/dev/null
  677.   chmod a+r ${LIB}/$file 2>/dev/null
  678. fi
  679.  
  680. if [ -r ${LIB}/$file ]; then
  681.   echo Fixing $file
  682.   sed -e 's/int    abort/void    abort/g' \
  683.   -e 's/int    free/void    free/g' \
  684.   -e 's/char \*    calloc/void \*    calloc/g' \
  685.   -e 's/char \*    malloc/void \*    malloc/g' \
  686.   -e 's/char \*    realloc/void \*    realloc/g' \
  687.   -e 's/int    exit/void    exit/g' ${LIB}/$file > ${LIB}/${file}.sed
  688.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  689.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  690.     rm -f ${LIB}/$file
  691.   fi
  692. fi
  693.  
  694. # Fix return type of free and {c,m,re}alloc in <malloc.h> on SunOS 4.1.
  695. file=malloc.h
  696. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  697.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  698.   chmod +w ${LIB}/$file 2>/dev/null
  699.   chmod a+r ${LIB}/$file 2>/dev/null
  700. fi
  701.  
  702. if [ -r ${LIB}/$file ]; then
  703.   echo Fixing $file
  704.   sed -e 's/typedef[     ]char \*    malloc_t/typedef void \*    malloc_t/g' \
  705.   -e 's/int[     ][     ]*free/void    free/g' \
  706.   ${LIB}/$file > ${LIB}/${file}.sed
  707.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  708.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  709.     rm -f ${LIB}/$file
  710.   fi
  711. fi
  712.  
  713.  
  714. # Fix bogus comment in <locale.h> on SunOS 4.1.
  715. file=locale.h
  716. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  717.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  718.   chmod +w ${LIB}/$file 2>/dev/null
  719.   chmod a+r ${LIB}/$file 2>/dev/null
  720. fi
  721.  
  722. if [ -r ${LIB}/$file ]; then
  723.   echo Fixing $file
  724.   sed -e 's%#endif / \*%#endif /\* %g' ${LIB}/$file > ${LIB}/${file}.sed
  725.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  726.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  727.     rm -f ${LIB}/$file
  728.   fi
  729. fi
  730.  
  731. # Fix bogus #ifdef in <hsfs/hsfs_spec.h> on SunOS 4.1.
  732. file=hsfs/hsfs_spec.h
  733. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  734.   mkdir ${LIB}/hsfs 2>/dev/null
  735.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  736.   chmod +w ${LIB}/$file 2>/dev/null
  737.   chmod a+r ${LIB}/$file 2>/dev/null
  738. fi
  739.  
  740. if [ -r ${LIB}/$file ]; then
  741.   echo Fixing $file
  742.   sed -e 's/\#ifdef __i386__ || __vax__/\#if __i386__ || __vax__/g' \
  743.     ${LIB}/$file > ${LIB}/${file}.
  744.   rm -f ${LIB}/$file; mv ${LIB}/${file}. ${LIB}/$file
  745.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  746.     rm -f ${LIB}/$file
  747.   fi
  748. fi
  749.  
  750. # Fix bogus #ifdef in <hsfs/hsnode.h> on SunOS 4.1.
  751. file=hsfs/hsnode.h
  752. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  753.   mkdir ${LIB}/hsfs 2>/dev/null
  754.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  755.   chmod +w ${LIB}/$file 2>/dev/null
  756.   chmod a+r ${LIB}/$file 2>/dev/null
  757. fi
  758.  
  759. if [ -r ${LIB}/$file ]; then
  760.   echo Fixing $file
  761.   sed -e 's/\#ifdef __i386__ || __sun4c__/\#if __i386__ || __sun4c__/g' \
  762.     ${LIB}/$file > ${LIB}/${file}.sed
  763.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  764.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  765.     rm -f ${LIB}/$file
  766.   fi
  767. fi
  768.  
  769. # Fix bogus #ifdef in <hsfs/iso_spec.h> on SunOS 4.1.
  770. file=hsfs/iso_spec.h
  771. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  772.   mkdir ${LIB}/hsfs 2>/dev/null
  773.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  774.   chmod +w ${LIB}/$file 2>/dev/null
  775.   chmod a+r ${LIB}/$file 2>/dev/null
  776. fi
  777.  
  778. if [ -r ${LIB}/$file ]; then
  779.   echo Fixing $file
  780.   sed -e 's/\#ifdef __i386__ || __vax__/\#if __i386__ || __vax__/g' \
  781.     ${LIB}/$file > ${LIB}/${file}.sed
  782.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  783.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  784.     rm -f ${LIB}/$file
  785.   fi
  786. fi
  787.  
  788. # Incorrect #include in Sony News-OS 3.2.
  789. file=machine/machparam.h
  790. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  791.   mkdir ${LIB}/machine 2>/dev/null
  792.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  793.   chmod +w ${LIB}/$file 2>/dev/null
  794.   chmod a+r ${LIB}/$file 2>/dev/null
  795. fi
  796.  
  797. if [ -r ${LIB}/$file ]; then
  798.   echo Fixing $file, incorrect \#include
  799.   sed -e 's@"../machine/endian.h"@<machine/endian.h>@' \
  800.     ${LIB}/$file > ${LIB}/${file}.
  801.   rm -f ${LIB}/$file; mv ${LIB}/${file}. ${LIB}/$file
  802.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  803.     rm -f ${LIB}/$file
  804.   fi
  805. fi
  806.  
  807. # Multiline comment after typedef on IRIX 4.0.1.
  808. file=sys/types.h
  809. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  810.   mkdir ${LIB}/sys 2>/dev/null
  811.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  812.   chmod +w ${LIB}/$file 2>/dev/null
  813.   chmod a+r ${LIB}/$file 2>/dev/null
  814. fi
  815.  
  816. if [ -r ${LIB}/$file ]; then
  817.   echo Fixing $file, comment in the middle of \#ifdef
  818.   sed -e 's@type of the result@type of the result */@' \
  819.     -e 's@of the sizeof@/* of the sizeof@' \
  820.     ${LIB}/$file > ${LIB}/${file}.sed
  821.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  822.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  823.     rm -f ${LIB}/$file
  824.   fi
  825. fi
  826.  
  827. # Fix line in IRIX 4.0.1 header file.  The sed script turns
  828. # #define EM_CTRL        (CUTIOC|0x1)
  829. # into
  830. # #define EM_CTRL        (CUTIOC|0x'1')
  831. file=sys/t3270reg.h
  832. if [ -r ${LIB}/$file ]; then
  833.   echo Fixing $file, overeager sed script
  834.   sed -e "s/0x'1'/0x1/" ${LIB}/$file > ${LIB}/${file}.sed
  835.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  836.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  837.     rm -f ${LIB}/$file
  838.   fi
  839. fi
  840.  
  841. # Turning // comments into /* */ comments trashes this IRIX 4.0.1
  842. # header file, which embeds // comments inside multi-line /* */
  843. # comments.  If this looks like the IRIX header file, we refix it by
  844. # just throwing away the // comments.
  845. file=fam.h
  846. if [ -r ${LIB}/$file ]; then
  847.   if egrep indigo.esd ${LIB}/$file > /dev/null; then
  848.     echo Fixing $file, overeager sed script
  849.     rm ${LIB}/$file
  850.     sed -e 's|//.*$||g' $file > ${LIB}/$file
  851.     chmod +w ${LIB}/$file 2>/dev/null
  852.     chmod a+r ${LIB}/$file 2>/dev/null
  853.   fi
  854. fi
  855.  
  856. # Another IRIX 4.0.1 header file contains the string "//"
  857. file=elf_abi.h
  858. if [ -r ${LIB}/$file ]; then
  859.   echo Fixing $file, overeager sed script
  860.   sed -e 's|"/\*"\*/|"//"|' ${LIB}/$file > ${LIB}/${file}.sed
  861.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  862.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  863.     rm -f ${LIB}/$file
  864.   fi
  865. fi
  866.  
  867. # Fix non-ANSI memcpy declaration that conflicts with gcc's builtin
  868. # declaration on Sun OS 4.x.  We must only fix this on Sun OS 4.x, because
  869. # many other systems have similar text but correct versions of the file.
  870. # To ensure only Sun's is fixed, we grep for a likely unique string.
  871. file=memory.h
  872. if [ -r $file ] && egrep '/\*    @\(#\)memory\.h 1\.[2-4] 8./../.. SMI; from S5R2 1\.2    \*/' $file > /dev/null; then
  873.   if [ ! -r ${LIB}/$file ]; then
  874.     cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  875.     chmod +w ${LIB}/$file 2>/dev/null
  876.     chmod a+r ${LIB}/$file 2>/dev/null
  877.   fi
  878.   if [ -r ${LIB}/$file ]; then
  879.     echo Replacing $file
  880.     cat > ${LIB}/$file << EOF
  881. /* This file was generated by fixincludes */
  882. #ifndef __memory_h__
  883. #define __memory_h__
  884.  
  885. #ifdef __STDC__
  886. extern void *memccpy();
  887. extern void *memchr();
  888. extern void *memcpy();
  889. extern void *memset();
  890. #else
  891. extern char *memccpy();
  892. extern char *memchr();
  893. extern char *memcpy();
  894. extern char *memset();
  895. #endif /* __STDC__ */
  896.  
  897. extern int memcmp();
  898.  
  899. #endif /* __memory_h__ */
  900. EOF
  901.   fi
  902. fi
  903.  
  904. # parameters not const on DECstation Ultrix V4.0.
  905. file=stdio.h
  906. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  907.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  908.   chmod +w ${LIB}/$file 2>/dev/null
  909.   chmod a+r ${LIB}/$file 2>/dev/null
  910. fi
  911.  
  912. if [ -r ${LIB}/$file ]; then
  913.   echo Fixing $file, non-const arg
  914.   sed -e 's@perror( char \*__s );@perror( const char *__s );@' \
  915.       -e 's@fputs( char \*__s,@fputs( const char *__s,@' \
  916.       -e 's@fopen( char \*__filename, char \*__type );@fopen( const char *__filename, const char *__type );@' \
  917.       -e 's@fwrite( void \*__ptr,@fwrite( const void *__ptr,@' \
  918.       -e 's@fscanf( FILE \*__stream, char \*__format,@fscanf( FILE *__stream, const char *__format,@' \
  919.       -e 's@scanf( char \*__format,@scanf( const char *__format,@' \
  920.       -e 's@sscanf( char \*__s, char \*__format,@sscanf( const char *__s, const char *__format,@' \
  921.     ${LIB}/$file > ${LIB}/${file}.sed
  922.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  923.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  924.     rm -f ${LIB}/$file
  925.   fi
  926. fi
  927.  
  928. # parameters conflict with C++ new on rs/6000 
  929. file=stdio.h
  930. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  931.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  932.   chmod +w ${LIB}/$file 2>/dev/null
  933. fi
  934.  
  935. if [ -r ${LIB}/$file ]; then
  936.   echo Fixing $file, parameter name conflicts
  937.   sed -e 's@rename(const char \*old, const char \*new)@rename(const char *_old, const char *_new)@' \
  938.     ${LIB}/$file > ${LIB}/${file}.sed
  939.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  940.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  941.     rm -f ${LIB}/$file
  942.   fi
  943. fi
  944.  
  945. # Don't use or define the name va_list in stdio.h.
  946. # This is for ANSI and also to interoperate properly with gvarargs.h.
  947. file=stdio.h
  948. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  949.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  950.   chmod +w ${LIB}/$file 2>/dev/null
  951.   chmod a+r ${LIB}/$file 2>/dev/null
  952. fi
  953.  
  954. if [ -r ${LIB}/$file ]; then
  955.   echo Fixing $file, use of va_list
  956.   # Arrange for stdio.h to use stdarg.h to define __gnuc_va_list
  957.   (echo "#define __need___va_list"
  958.    echo "#include <stdarg.h>") > ${LIB}/${file}.sed
  959.   # Use __gnuc_va_list in arg types in place of va_list.
  960.   # On 386BSD use __gnuc_va_list instead of _VA_LIST_. We're hoping the
  961.   # trailing parentheses and semicolon save all other systems from this.
  962.   # Define __va_list__ (something harmless and unused) instead of va_list.
  963.   # Don't claim to have defined va_list.
  964.   sed -e 's@ va_list @ __gnuc_va_list @' \
  965.       -e 's@ va_list)@ __gnuc_va_list)@' \
  966.       -e 's@ _VA_LIST_));@ __gnuc_va_list));@' \
  967.       -e 's@ va_list@ __va_list__@' \
  968.       -e 's@\*va_list@*__va_list__@' \
  969.       -e 's@VA_LIST@DUMMY_VA_LIST@' \
  970.     ${LIB}/$file >> ${LIB}/${file}.sed
  971.   
  972.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  973.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  974.     rm -f ${LIB}/$file
  975.   fi
  976. fi
  977.  
  978. # Cancel out ansi_compat.h on Ultrix.  Replace it with empty file.
  979. file=ansi_compat.h
  980. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  981.   if grep -s ULTRIX $file; then
  982.     echo "/* This file intentionally left blank.  */" > $LIB/$file
  983.   fi
  984. fi
  985.  
  986. # parameter to atof not const on DECstation Ultrix V4.0.
  987. # also get rid of bogus inline definitions in HP-UX 8.0
  988. file=math.h
  989. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  990.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  991.   chmod +w ${LIB}/$file 2>/dev/null
  992.   chmod a+r ${LIB}/$file 2>/dev/null
  993. fi
  994.  
  995. if [ -r ${LIB}/$file ]; then
  996.   echo Fixing $file, non-const arg
  997.   sed -e 's@atof( char \*__nptr );@atof( const char *__nptr );@' \
  998.       -e 's@inline int abs(int d) { return (d>0)?d:-d; }@@' \
  999.       -e 's@inline double abs(double d) { return fabs(d); }@@' \
  1000.     ${LIB}/$file > ${LIB}/${file}.sed
  1001.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  1002.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  1003.     rm -f ${LIB}/$file
  1004.   fi
  1005. fi
  1006.  
  1007. # In limits.h, put #ifndefs around things that are supposed to be defined
  1008. # in float.h to avoid redefinition errors if float.h is included first.
  1009. # On HP/UX this patch does not work, because on HP/UX limits.h uses
  1010. # multi line comments and the inserted #endif winds up inside the
  1011. # comment.  Fortunately, HP/UX already uses #ifndefs in limits.h; if
  1012. # we find a #ifndef FLT_MIN we assume that all the required #ifndefs
  1013. # are there, and we do not add them ourselves.
  1014. file=limits.h
  1015. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  1016.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  1017.   chmod +w ${LIB}/$file 2>/dev/null
  1018.   chmod a+r ${LIB}/$file 2>/dev/null
  1019. fi
  1020.  
  1021. if [ -r ${LIB}/$file ]; then
  1022.   if egrep 'ifndef[     ]+FLT_MIN' ${LIB}/$file >/dev/null; then
  1023.     true
  1024.   else
  1025.     echo Fixing $file
  1026.     sed -e '/[     ]FLT_MIN[     ]/i\
  1027. #ifndef FLT_MIN'\
  1028.         -e '/[     ]FLT_MIN[     ]/a\
  1029. #endif'\
  1030.         -e '/[     ]FLT_MAX[     ]/i\
  1031. #ifndef FLT_MAX'\
  1032.         -e '/[     ]FLT_MAX[     ]/a\
  1033. #endif'\
  1034.         -e '/[     ]FLT_DIG[     ]/i\
  1035. #ifndef FLT_DIG'\
  1036.         -e '/[     ]FLT_DIG[     ]/a\
  1037. #endif'\
  1038.         -e '/[     ]DBL_MIN[     ]/i\
  1039. #ifndef DBL_MIN'\
  1040.         -e '/[     ]DBL_MIN[     ]/a\
  1041. #endif'\
  1042.         -e '/[     ]DBL_MAX[     ]/i\
  1043. #ifndef DBL_MAX'\
  1044.         -e '/[     ]DBL_MAX[     ]/a\
  1045. #endif'\
  1046.         -e '/[     ]DBL_DIG[     ]/i\
  1047. #ifndef DBL_DIG'\
  1048.         -e '/[     ]DBL_DIG[     ]/a\
  1049. #endif'\
  1050.       ${LIB}/$file > ${LIB}/${file}.sed
  1051.     rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  1052.   fi
  1053.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  1054.     echo Deleting ${LIB}/$file\; no fixes were needed.
  1055.     rm -f ${LIB}/$file
  1056.   fi
  1057. fi
  1058.  
  1059. # These two files on SunOS 4 are included by other files
  1060. # in the same directory, using "...".  So we must make sure they exist
  1061. # in the same directory as the other fixed files.
  1062. if [ -r ${INPUT}/multimedia/audio_errno.h ]
  1063. then
  1064.   ln -s ${INPUT}/multimedia/audio_errno.h ${LIB}/multimedia 2>/dev/null
  1065. fi
  1066. if [ -r ${INPUT}/multimedia/audio_hdr.h ]
  1067. then
  1068.   ln -s ${INPUT}/multimedia/audio_hdr.h ${LIB}/multimedia 2>/dev/null
  1069. fi
  1070.  
  1071. # These files on Ultrix 4.2 put comments around instances of #endif
  1072. # __mips.  When the sed expression turns that into #endif /* __mips */
  1073. # the comment ends prematurely.
  1074. for file in sys/audit.h sys/signal.h; do
  1075.   if [ -r ${LIB}/${file} ]; then
  1076.     echo Fixing $file, early comment termination
  1077.     sed -e 's|^#endif /\*.*\*/|#endif|g' ${LIB}/${file} > ${LIB}/${file}.sed
  1078.     rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  1079.   fi
  1080. done
  1081.  
  1082. # This file in RISC/os uses /**/ to concatenate two tokens.
  1083. file=bsd43/bsd43_.h
  1084. if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
  1085.   cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
  1086.   chmod +w ${LIB}/$file 2>/dev/null
  1087.   chmod a+r ${LIB}/$file 2>/dev/null
  1088. fi
  1089. if [ -r ${LIB}/$file ]; then
  1090.   sed -e 's|/\*\*/|##|' ${LIB}/$file > ${LIB}/${file}.sed
  1091.   rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
  1092.   if cmp $file ${LIB}/$file >/dev/null 2>&1; then
  1093.     rm -f ${LIB}/$file
  1094.   fi
  1095. fi
  1096.  
  1097. echo 'Removing unneeded directories:'
  1098. cd $LIB
  1099. files=`find . -type d -print | sort -r`
  1100. for file in $files; do
  1101.   rmdir $LIB/$file > /dev/null 2>&1
  1102. done
  1103.  
  1104. if $LINKS; then
  1105.   echo 'Making internal symbolic non-directory links'
  1106.   cd ${INPUT}
  1107.   files=`find . -type l -print`
  1108.   for file in $files; do
  1109.     dest=`ls -ld $file | sed -n 's/.*-> //p'`
  1110.     if expr "$dest" : '[^/].*' > /dev/null; then    
  1111.       target=${LIB}/`echo file | sed "s|[^/]*\$|$dest|"`
  1112.       if [ -f $target ]; then
  1113.         ln -s $dest ${LIB}/$file >/dev/null 2>&1
  1114.       fi
  1115.     fi
  1116.   done
  1117. fi
  1118.  
  1119. echo 'Cleaning up DONE files.'
  1120. cd $LIB
  1121. find . -name DONE -exec rm -f {} ';'
  1122.  
  1123. exit 0
  1124.